﻿/*======================================================================
== Copyright : BlueCurve (c)
== Licence   : Gnu/GPL v2.x
== Author    : Teddy Albina
== Email     : bluecurveteam@gmail.com
== Web site  : http://www.codeplex.com/BlueCurve
========================================================================*/
using System.Collections.Generic;
using System.ServiceModel;
using BlueCurve.IRemoteOperations;

namespace Indexer.Remoting
{
    /// <summary>
    /// Client wcf
    /// </summary>
    public class Tcpclient
    {
        /// <summary>
        /// Obtiens mes méta-données néçessaires à une eventuelle mise à jour du document
        /// </summary>
        /// <param name="path">Chemin d'accès du document (chemin de fichier ou URL)</param>
        public BlueCurve.SearchContract.UpdateMetaData GetMetaDataForUpdate(string path)
        {
            try
            {
                ChannelFactory<IRemoteIndexation> channelFactory = new ChannelFactory<IRemoteIndexation>("Indexer.Queryserver");
                IRemoteIndexation _queryserver = channelFactory.CreateChannel();
                return _queryserver.GetMetaDataForUpdate(path);
            }
            catch
            {
                return null;
            }
        }

        /// <summary>
        /// Demande au Reository une liste de document à indexer
        /// </summary>
        /// <returns><![CDATA[List<string>]]></returns>
        public List<string> GetFilesToIndex()
        {
            try
            {
                ChannelFactory<IRepository> channelFactory = new ChannelFactory<IRepository>("Indexer.Repository");
                IRepository _repository = channelFactory.CreateChannel();

                return _repository.GetListFilesToIndex(150);
            }
            catch
            {
                return null;
            }
        }

        /// <summary>
        /// Supprime un fichier du repository
        /// </summary>
        /// <param name="path">Chemin d'accès du document (chemin de fichier ou URL) à supprimer</param>
        public bool DeleteFile(string path)
        {
            try
            {
                ChannelFactory<IRepository> channelFactory = new ChannelFactory<IRepository>("Indexer.Repository");
                IRepository _repository = channelFactory.CreateChannel();
                _repository.DeleteFile(path);

                return true;
            }
            catch
            {
                return false;
            }
        }

        /// <summary>
        /// Index un document
        /// </summary>
        /// <param name="doc">Données du document à indexer</param>
        public bool IndexDocument(BlueCurve.IndexationContract.IndexationData doc)
        {
            try
            {
                ChannelFactory<IRemoteIndexation> channelFactory = new ChannelFactory<IRemoteIndexation>("Indexer.Queryserver");
                IRemoteIndexation _indexation = channelFactory.CreateChannel();
                return _indexation.IndexOperation(doc);
            }
            catch
            {
                return false;
            }
        }
    }
}
